উদাহরণ সহ Native এবং Named Query

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Native Query এবং Named Query
189

স্প্রিং বুট ORM (Spring Boot ORM) এর মাধ্যমে ডেটাবেজে প্রশ্ন (query) করার জন্য দুটি প্রধান ধরনের কৌশল রয়েছে: Native Query এবং Named Query। এই দুটি কৌশল স্প্রিং ডেটা JPA বা Hibernate এর সাহায্যে ডেটাবেজে নির্দিষ্ট অপারেশন করতে ব্যবহৃত হয়। আসুন, আমরা এই দুটি কৌশল এবং তাদের ব্যবহার উদাহরণসহ বুঝে দেখি।


Native Query

Native Query হলো ডেটাবেজের SQL স্টাইল ব্যবহার করে কোয়েরি করার পদ্ধতি। যখন JPA বা Hibernate এর মাধ্যমে সাধারণ JPQL (Java Persistence Query Language) দিয়ে ডেটাবেজে প্রশ্ন করা হয় না, তখন Native SQL ব্যবহার করা হয়।

Native Query SQL স্টাইলের কোয়েরি ব্যবহার করতে সক্ষম করে, যেমন যে SQL কোয়েরি ডেটাবেজের জন্য বিশেষভাবে তৈরি করা হয়েছে।

Native Query এর উদাহরণ:

ধরা যাক আমাদের একটি Employee Entity ক্লাস আছে, যেখানে id, name, এবং salary ফিল্ড রয়েছে। আমরা একটি native query ব্যবহার করে salary এর ওপর ভিত্তি করে Employee তালিকা আনতে চাই।

Employee Entity ক্লাস:

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private Double salary;

    // Getters and Setters
}

Native Query ব্যবহার করা:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {

    @Query(value = "SELECT * FROM Employee e WHERE e.salary > :salary", nativeQuery = true)
    List<Employee> findEmployeesWithSalaryGreaterThan(@Param("salary") Double salary);
}

এখানে, @Query অ্যানোটেশন ব্যবহার করে আমরা SQL স্টাইলে কোয়েরি লিখেছি, যেখানে nativeQuery = true নির্দেশ করা হয়েছে।

ব্যবহার:

@Autowired
private EmployeeRepository employeeRepository;

public void getEmployees() {
    List<Employee> employees = employeeRepository.findEmployeesWithSalaryGreaterThan(50000.0);
    employees.forEach(employee -> System.out.println(employee.getName()));
}

এই কোডে, salary এর তুলনায় বড় এমন সমস্ত Employee অবজেক্ট ডেটাবেজ থেকে নিয়ে আসা হবে।


Named Query

Named Query হলো JPA-এর একটি বৈশিষ্ট্য, যা কোয়েরি লেখার জন্য নির্দিষ্ট নাম ব্যবহার করে এবং একটি কেন্দ্রীয় স্থান থেকে (যেমন Entity ক্লাসের মধ্যে) সেই কোয়েরি রেজিস্টার করে। Named Query ব্যবহার করার সময় কোয়েরি লিখে তা Entity ক্লাসের মধ্যে @Query অ্যানোটেশন বা @NamedQuery অ্যানোটেশন ব্যবহার করে সংজ্ঞায়িত করা হয়।

Named Query এর উদাহরণ:

ধরা যাক, আমাদের একটি Department Entity ক্লাস রয়েছে, যেখানে id, name এবং location ফিল্ড রয়েছে। আমরা Named Query ব্যবহার করে Department নামের ভিত্তিতে সমস্ত ডেটা পাওয়ার চেষ্টা করব।

Department Entity ক্লাস:

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.NamedQuery;

@Entity
@NamedQuery(name = "Department.findByName", query = "SELECT d FROM Department d WHERE d.name = :name")
public class Department {

    @Id
    private Long id;
    private String name;
    private String location;

    // Getters and Setters
}

এখানে, @NamedQuery অ্যানোটেশন ব্যবহার করে Department.findByName নামক একটি কোয়েরি সংজ্ঞায়িত করা হয়েছে। এই Named Query কেবলমাত্র Department নামের জন্য সমস্ত রেকর্ড আনতে ব্যবহৃত হবে।

Named Query ব্যবহার করা:

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface DepartmentRepository extends JpaRepository<Department, Long> {

    @Query(name = "Department.findByName")
    List<Department> findByName(@Param("name") String name);
}

এখানে, @Query(name = "Department.findByName") দিয়ে আমরা Department.findByName নামক Named Query ব্যবহার করেছি।

ব্যবহার:

@Autowired
private DepartmentRepository departmentRepository;

public void getDepartments() {
    List<Department> departments = departmentRepository.findByName("Sales");
    departments.forEach(department -> System.out.println(department.getLocation()));
}

এই কোডের মাধ্যমে আমরা Sales নামের সমস্ত Department অবজেক্ট ডেটাবেজ থেকে নিয়ে আসব।


Native এবং Named Query এর তুলনা

বৈশিষ্ট্যNative QueryNamed Query
কোয়েরি ধরনের স্টাইলSQL কোয়েরি (ডেটাবেজ নির্দিষ্ট)JPQL (Java Persistence Query Language)
কোড লেখার স্থানকোডে সরাসরি কোয়েরি লেখা হয়Entity ক্লাসে কোয়েরি সংজ্ঞায়িত করা হয়
পারফরম্যান্সসাধারণত দ্রুত, কিন্তু ডেটাবেজ নির্ভরডেটাবেজ নিরপেক্ষ, তবে কিছু পরিস্থিতিতে ধীর হতে পারে
ডেটাবেজ নির্ভরতাডেটাবেজ নির্দিষ্ট (RDBMS নির্ভর)ডেটাবেজ নিরপেক্ষ (JPA নির্ভর)
উপযোগিতাবিশেষ SQL ফিচার ব্যবহার করার সময়JPQL বা সাধারণ ডেটাবেজ অপারেশন করার সময়

সারসংক্ষেপ

  • Native Query ব্যবহার করে সরাসরি SQL কোয়েরি ব্যবহার করা হয়, যা ডেটাবেজ নির্দিষ্ট এবং কিছু বিশেষ পরিস্থিতিতে কার্যকর।
  • Named Query হলো JPA-এর একটি শক্তিশালী বৈশিষ্ট্য যা কোয়েরি রিফারেন্স এবং ডেটাবেজ নিরপেক্ষতা নিশ্চিত করে। এটি Entity ক্লাসে সংজ্ঞায়িত করা হয় এবং বিভিন্ন অংশে পুনঃব্যবহার করা যায়।
  • যখন আপনি ডেটাবেজ নির্দিষ্ট SQL কোয়েরি ব্যবহার করতে চান, তখন Native Query ব্যবহার করুন, এবং যখন ডেটাবেজ নিরপেক্ষ, সাধারণ কোয়েরি ব্যবহার করতে চান, তখন Named Query ব্যবহার করা উচিত।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...